/*
 * @Author: 谢陈洁
 * @Date: 2025-05-23 16:10:06
 * @LastEditors: 谢陈洁
 * @LastEditTime: 2025-07-30 10:18:06
 * @Description: file content
 */
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
import plugins from './config/vite-plugin'
import VueDevTools from 'vite-plugin-vue-devtools'
// import { viteMockServe } from 'vite-plugin-mock'

export default defineConfig(({ command, mode }) => {
  //获取各种环境下的对应的变量
  // mode 是当前的环境，可能是 'development'、'production' 或 'test'
  // process.cwd() 是当前工作目录（根目录）
  // loadEnv 函数用于加载指定模式下的环境变量
  // command 是当前的命令，可能是 'serve'（开发环境）或 'build'（生产环境）
  const env = loadEnv(mode, process.cwd())
  console.log('当前环境:', mode, env.VITE_APP_ENV) // 输出当前环境变量
  console.log('当前命令:', command) // 输出当前命令（serve 或 build）
  return {
    plugins: [
      vue(),
      VueDevTools(),
      ...plugins
      // viteMockServe({
      //   mockPath: 'mock', // 指定 mock 文件夹路径
      //   enable: command === 'serve', // 仅在开发环境启用 mock
      //   watchFiles: true // 监听文件变化
      // })
    ],
    css: {
      preprocessorOptions: {
        scss: {
          // 这里可以配置全局的 SCSS 变量、混入等 仅作用于 .vue 文件的 <style lang="scss"> 块中。
          additionalData: `
            @use "@/assets/styles/element/index.scss" as *;
            @use "@/assets/styles/index.scss" as *;
          ` // 引入 Element Plus 的样式变量
        }
      }
    },
    resolve: {
      alias: {
        '@': path.resolve(__dirname, 'src') // 设置别名 @ 指向 src 目录
        // 如果有其他别名，可以在这里继续添加
      }
    },
    server: {
      open: true, // 启动时自动打开浏览器
      proxy: {
        [env.VITE_BASE_API]: {
          target: env.VITE_SERVER_URL, // 替换为你的后端服务地址
          changeOrigin: true,
          rewrite: path => path.replace(/^\/adminapi/, '')
        }
        // [env.VITE_APP_BASE_API]: {
        //   target: env.VITE_SERVER_URL, // 替换为你的后端服务地址
        //   changeOrigin: true,
        //   rewrite: path => path.replace(/^\/api/, '')
        // },
        // 如果有其他代理配置，可以在这里继续添加
      }
    },
    base: '/admin/', // 关键：设置为子路径 /admin/，用于解决部署时静态资源路径问题
    build: {
      target: 'es2015', // 构建目标
      outDir: 'dist', // 输出目录
      assetsDir: 'static',
      assetsInlineLimit: 4096, // 资源转 base64 的限制
      cssCodeSplit: true, // 是否将 CSS 分离为单独的文件
      sourcemap: mode === 'development', // 是否生成 sourcemap 文件
      reportCompressedSize: false, // 是否生成压缩后的大小报告
      chunkSizeWarningLimit: 500, //  chunk 大小警告的限制
      rollupOptions: {
        output: {
          // 静态资源分类打包
          chunkFileNames: 'static/js/[name]-[hash].js',
          entryFileNames: 'static/js/[name]-[hash].js',
          assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
          // 分包
          manualChunks: {
            // 将vue相关的包打包到一个文件中
            vue: ['vue', 'vue-router', 'pinia', 'pinia-plugin-persistedstate'],
            // 将element相关的包打包到一个文件中
            element: ['element-plus', '@element-plus/icons-vue'],
            // 将utils相关的包打包到一个文件中
            utils: ['axios', 'nprogress', 'vue-echarts', '@vueuse/core'],
            editor: ['md-editor-v3']
          }
        }
      }
    }
  }
})
